#include<iostream>
#include<signal.h>
#include<unistd.h>
#include<sys/types.h>

void printPeindingSig()//获取pending信号集
{
    std::cout<<"pending:";
    sigset_t s;
    sigemptyset(&s);
    sigpending(&s);
    for(int i=31;i>0;i--)
    {
        if(sigismember(&s,i))
            std::cout<<"1";
        else 
            std::cout<<"0";
    }
    std::cout<<std::endl;
}

void sighandler(int signo)
{
    std::cout<<"正在执行2号信号的自定义动作"<<std::endl;
    std::cout<<"此时的pending信号集:";
    printPeindingSig();
}

int main()
{
    std::cout<<"pid:"<<getpid()<<std::endl;
    sigset_t s;
    signal(SIGINT, sighandler);
    sigemptyset(&s);
    //设置阻塞信号集，阻塞2号信号
    sigaddset(&s,SIGINT);
    sigprocmask(SIG_BLOCK,&s,nullptr);
    int cnt=0;
    while(cnt<10)
    {
        cnt++;
        printPeindingSig();//获取pending(未决)信号集
        sleep(1);
    }
    sigprocmask(SIG_UNBLOCK,&s,nullptr);//取消对2号信号的屏蔽
    return 0;
}